[iOS 8] ナビゲーションバーとツールバーを同時消し
hidesBarsOnTap
iOS 8 から、ナビゲーションバーとツールバーを同時に消去できるメソッドが UINavigationController に追加されました。
- hidesBarsOnSwipe
- hidesBarsOnTap
- hidesBarsWhenKeyboardAppears
- hidesBarsWhenVerticallyCompact
今回は hidesBarsOnTap について説明します。
hidesBarsOnTap は値が true の場合、navigationController の view がタップされるたびに、ナビゲーションバーとツールバーの表示/非表示を切り替えます。
複雑な実装をすることなく、iPhone 標準の「写真」アプリのような表示切り替えが可能となります。
サンプルコード
override func viewDidLoad() { super.viewDidLoad() navigationController?.hidesBarsOnTap = true // これだけ }
また、Storyboard で設定することも可能です。
なお、ステータスバーの表示/非表示をナビゲーションバーと連動させたいときは、以下のメソッドを ViewController でオーバーライドします。
override func prefersStatusBarHidden() -> Bool { return navigationController!.navigationBarHidden }
ただし、どういうわけかこのメソッドを実装すると、ナビゲーションバーが非表示になる時のアニメーションがなくなってしまいます。(Slide ではなく None という感じ)
まとめ
なかなか便利なメソッドですが、動きを細かくコントロールできなかったり、挙動が怪しい部分があるので、実戦で使うにはまだ難しいかなと個人的には思いました。
具体的には以下の様な懸念事項が挙げられます。
- view にボタンなどを配置した場合、そのボタンがタップされても表示/非表示を切り替えてしまう
- ステータスバーとナビゲーションバー連動時のアニメーションが不満(上で書いたやつです)
- ツールバーにアイテムがない場合、タップした時にツールバーが非表示にならない
しかし、「こんなメソッドがある」というのは覚えておいて損はないと思います。
これから徐々に挙動や機能が進化することを願っています。